// 对 axios 的二次封装
import axios from 'axios'
import router from '../router' // 引入路由对像，用于路由跳转

// 创建一个新的 axios 实例
axios.defaults.withCredentials = false //解决跨域后如何在请求里带上cookie的问题
var http = axios.create({
  baseURL: 'http://127.0.0.1:4523/mock/1183009/',//http://115.158.28.157:86/
  timeout: 1000, // 请求超时
  headers: {
    'Content-Type': 'application/json'
  }
})
axios.defaults.headers['Access-Control-Allow-Origin']='*'
//设置请求传数据递格式（看看服务器要什么格式）
//X-WWW-from-urlencoded


// 请求拦截（在请求发出去之前拦截），给所有的请求都带上 token (JWt 算法)
http.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token')
    if (token) {
      // 设置 token ，一般是在 headers 里加入 Authorization，并加上 Bearer 标注
      // 最好通过此种形式设置 request.headers['Authorization']
      config.headers['Authorization'] = token;
      //token && (config.headers.Authorization=token);
    }
    return config
  },
  //如果拦截失败
  (error) => {
    console.log(error)
    return Promise.reject(error)
  }
);

// 拦截响应，遇到 token 不合法则报错
http.interceptors.response.use(
    response => {
        if (response.data.token) { // 将返回的最新的 token 保存
            localStorage.setItem('token', response.data.token);
        }
        return response;
    },
    error => {

      // let{
      //   response
      // }=error;
      // if(response){
      //   //服务器最起码返回结果了
      //   switch(response.status){
      //     case 401://当前请求用户需要验证，（未登录）
      //         break;
      //     case 403:// 服务器拒绝执行 token过期
      //         break;
      //     case 404://找不到页面
      //         break;
      //   } 

      // }else{
      //   //服务器连结果都没有返回
      //   if(!window.navigator.onLine){
      //     //断网处理，可以跳转到断网页面
      //     return;
      //   }
      //   return Promise.reject(error);
      // }

        if (error.response.status === 401) {
            // 401 说明 token 验证失败
            // 可以直接跳转到登录页面，重新登录获取 token
            localStorage.removeItem('token');
            console.log(error.response.data.error.message);
            router.replace({
                path: '/Login',
                query: {
                    redirect: router.currentRoute.fullPath
                }
            })
        }else if(error.response.status === 404){
          //找不到相应资源
          router.replace({
            path: '/NotFandpage',
            query: {
                redirect: router.currentRoute.fullPath
            }
        })
        } else if (error.response.status === 500) {
            // 服务器错误
            return Promise.reject('服务器出错：', error.response.data);
        }
        return Promise.reject(error.response.data); // 返回接口返回的错误信息
    });

export default http